package com.npf.imgserver.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;

/**
 * 〈功能简述〉
 * 〈图片操作 工具类〉
 *
 * @author NiPengFei
 * @create 2018/6/4
 * @since 1.0.0
 */
public class ImgUtil {

    public static final Logger logger= LoggerFactory.getLogger(ImgUtil.class);

    /**
     * 判断base64图片的字节 （不是100%精确 转成字节数组100%精确）
     * @param image
     * @return
     */
    public static Integer imageSize(String image) {
        // 1.需要计算文件流大小，首先把头部的data:image/png;base64,（注意有逗号）去掉。
        String str = image.substring(22);
        //2.找到等号，把等号也去掉
        Integer equalIndex = str.indexOf("=");
        if (str.indexOf("=") > 0) {
            str = str.substring(0, equalIndex);
        }
        //3.原来的字符流大小，单位为字节
        Integer strLength = str.length();
        //4.计算后得到的文件流大小，单位为字节
        Integer size = strLength - (strLength / 8) * 2;
        return size;
    }

    /**
     * 校验经过base64编码的字符串是否是图片文件
     * @param base64Str
     * @return
     */
    synchronized public static boolean isImageFromBase64(String base64Str) {
        boolean flag = false;
        try {
            BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(base64Str)));
            if (null == bufImg) {
                return flag;
            }
            flag = true;
        } catch (Exception e) {
            logger.error("校验base64图片失败",e);
        }
        return flag;
    }

}
